#include "../include/conf_reader.h"
#include <iostream>


conf_reader * conf_reader::reader=nullptr;  //静态变量，用于初始化

conf_reader::conf_reader(){
    this->get_file_to_read(CONF_FILEPATH);
}

static void string_trim(std::string & str){
    int index1=str.find_first_not_of(" \t\n\r");
    str.erase(0,index1);
    int index2=str.find_last_not_of(" \t\n\r");
    str.erase(index2+1);
}

bool conf_reader::get_file_to_read(const char * file)
{
   //读取到全部的配置文件信息
   FILE * fd=fopen(file,"r");
    if(fd==nullptr){
       perror("配置文件打开失败");
       return false;    // 返回这个，这个程序就直接强制退出吧
    }
    std::string tmp;
    char  line_data[500];
    while(!feof(fd)){   //判断是否到文件末尾了
        if(fgets(line_data,500,fd)==nullptr){
            continue;
        }
        //判断第一个字符
        if(line_data[0]=='['|| line_data[0]=='#'|| line_data[0]=='\n'|| line_data[0]=='\t'|| line_data[0]=='\r'){
            continue;
        }
        tmp=line_data;
        //截取数据，得到键值对
        int index=tmp.find_first_of('=');
        std::string key;
        key=tmp.substr(0,index);
        string_trim(key);
        std::string value;
        value=tmp.substr(index+1);
        string_trim(value);
        //加入到unorderd_map
        this->conf_data.insert(std::make_pair(key,value));

    }
    // //逐一拿取出来判断是否读取成功----测试用的
    // for(auto it=conf_data.begin();it!=conf_data.end();++it){
    //     std::cout<<it->first<<"---"<<it->second<<std::endl;
    // }

    
    return true;

}

const char *conf_reader::get_value_from_key(const char *_key,const char *default_value)
{
    //std::string key=_key;
    //auto it=this->conf_data.find(key);
    ;
    if(this->conf_data.count(_key)){
       
        return conf_data[_key].c_str();   //如果成功
    }
    return default_value;

   
}
